package com.example.courseselectionsystemconsume.timerTasks;

import com.alibaba.fastjson.JSON;
import com.example.courseselectionsystemconsume.pojo.CourseRecord;
import com.example.courseselectionsystemconsume.service.CourseService;
import com.example.courseselectionsystemconsume.service.impl.CourseServiceImpl;
import com.example.courseselectionsystemconsume.timerTasks.service.Timer1Service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.SetOperations;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.util.Set;

/**
 * @description: TODO
 * @author: Tokyo_God
 * @date: 2021/1/9 20:19
 * Role of:   定时器1
 * @version: v1.0
 */
/////////选课定时器////////
//定时器 (定时器会在10秒后开启)  在这10秒内可以 从redis里  一次性拿出  选课
@Component
public class Timer1 implements Runnable {

    //操作redis
    @Resource
    RedisTemplate<String,Object> template;
    //操作定时器1
    @Autowired
    Timer1Service timer1Service;

    //选课用
    /*@Autowired
    CourseServiceImpl courseService;   这是动态代理不能注入*/
    @Autowired
    CourseService courseService;

    private Integer num=0;

    @Override
    public void run() {
        /////////////////////这里应该写集合对象////////////////////////////


        SetOperations setOperations=template.opsForSet();
//        setOperations.size("courseRecords");//查询key==courseRecords的长度
        Set<String> set=setOperations.members("courseRecords");
        //如果我缓存里的数据不是null  (String  value)
//        ValueOperations<String,Object> myRedis=template.opsForValue();
        /*if(myRedis.get("courseRecord")==null){
            System.out.println("消费者redis拿不到courseRecord数据，courseRecord 为null");
        }else{
            num=0;//有数据可以在循环执行3次

            String jsonStr= (String) myRedis.get("courseRecord");

            *//*System.out.println("消费者redis拿取缓存:"+jsonStr);*//*
            CourseRecord courseRecord= JSON.parseObject(jsonStr,CourseRecord.class);
            System.out.println("转换成对象后"+courseRecord);
            courseService.takeTheCourse(courseRecord);

            System.out.println("拿取出来之后正在删除。。。。。。。。。。");
            template.delete("courseRecord");//读取完后删除数据
        }*/
        //Set   JsonStr
        if(null!=set&&set.size()>0){
            //除非你后面还有数据负责只定时3次(有数据会刷新你定时的次数)
            num=0;//有数据可以在循环执行3次
            CourseRecord courseRecord=null;
            for (String jsonStr:set){
                System.out.println("json"+jsonStr);
                courseRecord= JSON.parseObject(jsonStr,CourseRecord.class);
                courseService.takeTheCourse(courseRecord);//选课
            }
            System.out.println("拿取出来之后正在删除redis。。。。。。。。。。");
            template.delete("courseRecords");//读取完后删除数据
        }else{
            System.out.println("数据为空");
        }

        num++;
        if(num==3){
            num=0;//循环3次都没数据我给它关闭掉
            timer1Service.stopCron();//处理完数据后关闭
        }
    }
}
